/**
 * 至少是其他数字两倍的最大数
 * 给你一个整数数组 nums ，其中总是存在 唯一的 一个最大整数 。
 *
 * 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是，则返回 最大元素的下标 ，否则返回 -1 。
 *
 * 输入：nums = [3,6,1,0]
 * 输出：1
 * 解释：6 是最大的整数，对于数组中的其他整数，6 大于数组中其他元素的两倍。6 的下标是 1 ，所以返回 1 。
 * 输入：nums = [1,2,3,4]
 * 输出：-1
 * 解释：4 没有超过 3 的两倍大，所以返回 -1 。
 * 输入：nums = [1]
 * 输出：0
 * 解释：因为不存在其他数字，所以认为现有数字 1 至少是其他数字的两倍。
 */

//优化方法：遍历找出第二大的数字，只需要将两者进行比较
public class Num747 {
    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,4};
        System.out.println(dominantIndex(nums));
    }

    private static int dominantIndex(int[] nums) {
        if (nums.length == 1) {
            return 0;
        }
        //记录最大数字以及下标，初始值默认为第一个数字
        int maxNum = nums[0], target = 0;
        //遍历，逐一比对，设最大数为x，比对数为y
        for (int i = 1; i < nums.length; i++) {
            //成立情况，x>2y
            if (maxNum >= nums[i] * 2) {
                continue;
            }
            //不成立情况，x和y比较
            if (nums[i] >= maxNum) {//y>x，可能出现新的最大数
                if (nums[i] >= maxNum * 2) {//y>=2x,即检测对比数y是否满足成为最大数的条件
                    target = i;
                } else {//不符合要求说明数组到此全部不符合要求，数组被污染
                    target = -1;
                }
                maxNum = nums[i]; // 无论是否符合，y都是目前的最大数
            } else {//y<x,一定不符合要求，数组被污染
                target = -1;
            }
        }
        return target;
    }
}
